package com.bk.bookviews.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.UUID;

public class FileUpload {
//    public static String upload(MultipartFile file){
//        if (file.isEmpty()){
//            return "文件为空";
//        }
//        String fileName=file.getOriginalFilename();
//        String filePath="src/main/resources/pic/";
//        File dest=new File(filePath+fileName);
//        if (!dest.getParentFile().exists()){
//            dest.getParentFile().mkdir();
//        }
//        try {
//            file.transferTo(dest);
//            return fileName;
//        } catch (IllegalStateException e){
//            e.printStackTrace();
//        }catch (IOException e) {
//            e.printStackTrace();
//        }
//        return "上传失败";
//    }


    private static  final Logger logger = LoggerFactory.getLogger(FileUpload.class);

    // 项目根路径下的目录  -- SpringBoot static 目录相当于是根路径下（SpringBoot 默认）
    public final static String UPLOAD_PATH_PREFIX = "/static/image/";

    public static String upload(MultipartFile uploadFile){
        if(uploadFile.isEmpty()){
            //返回选择文件提示
            return "请选择上传文件";
        }
        //构建文件上传所要保存的"文件夹路径"--这里是相对路径，保存到项目根路径的文件夹下
        // String realPath = new String("src/main/resources" + UPLOAD_PATH_PREFIX);
        String realPath = new File("" + UPLOAD_PATH_PREFIX).getAbsolutePath();

        logger.info("-----------上传文件保存的路径【"+ realPath +"】-----------");
        logger.error("-----------上传文件保存的路径【"+ realPath +"】-----------");
        //存放上传文件的文件夹
        File file = new File(realPath);
        logger.info("-----------存放上传文件的文件夹【"+ file +"】-----------");
        logger.info("-----------输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径【"+ file.getAbsolutePath() +"】-----------");
        if(!file.isDirectory()){
            //递归生成文件夹
            file.mkdirs();
        }
        //获取原始的名字  original:最初的，起始的  方法是得到原来的文件名在客户机的文件系统名称
        String oldName = uploadFile.getOriginalFilename();
        logger.info("-----------文件原始的名字【"+ oldName +"】-----------");
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."),oldName.length());
        logger.info("-----------文件要保存后的新名字【"+ newName +"】-----------");
        try {
            //构建真实的文件路径
            File newFile = new File(file.getAbsolutePath() + File.separator + newName);
            //转存文件到指定路径，如果文件名重复的话，将会覆盖掉之前的文件,这里是把文件上传到 “绝对路径”
            uploadFile.transferTo(newFile);
            String filePath = UPLOAD_PATH_PREFIX  + newName;
            logger.info("-----------【"+ filePath +"】-----------");
            return filePath;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

    /**

     * 删除单个文件

     *

     * @param fileName

     *            被删除文件的文件名

     * @return 单个文件删除成功返回true,否则返回false

     */

    public static boolean deleteFile(String fileName) {

        File file = new File(fileName);

        if (file.isFile() && file.exists()) {

            file.delete();

            System.out.println("删除单个文件" + fileName + "成功！");

            return true;

        } else {

            System.out.println("删除单个文件" + fileName + "失败！");

            return false;

        }

    }
}
